<?php

namespace App\Models\Traits;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Str;
use Overtrue\Pinyin\Pinyin;

trait HasInitialsAttribute
{
    protected static function bootHasInitialsAttribute()
    {
        static::creating(function (Model $model) {
            if (\Schema::hasColumn($model->getTable(), $model->initials_column_name())) {
                $model->setAttribute('initials', $model->getInitials($model->realname));
            }
        });
    }

    protected function initials_column_name(): string
    {
        return 'initials';
    }

    protected function getInitials($realname)
    {
        // 获取中文的拼音
        if (empty($realname)) {
            return "";
        } else {
            $pinyin = new Pinyin();
            $pinyins = $pinyin->name($realname);
            if (empty($pinyins)) {
                // 如果没有的话就可能是英文，这样的话就直接获取首个字母
                $initials = $realname[0];
            } else {
                // 如果有的话就获取第一个拼音的第一个字母
                $initials = $pinyins[0][0];
            }
            // 将字母转为小写
            return Str::upper($initials);
        }
    }
}
